home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 143
/
Gekkan Dennou Club - 2000.4 Vol. 143 (Japan).7z
/
Gekkan Dennou Club - 2000.4 Vol. 143 (Japan).bin
/
ikap
/
grp1
/
smp2
/
structs.inc
< prev
next >
Wrap
Text File
|
1999-12-26
|
5KB
|
158 lines
/*
構造体
*/
#define RAD (3.141592/180)
typedef int FIX32; //(1,15,16)
#define hshort(adr) (*(short *)&(adr)) //上位16ビット
#define hushort(adr) (*(unsigned short *)&(adr)) //
//---------------------------------------------------------------------- SyncMan()
/*
スプライトVRAMおよびパレット固定(システム未管理)前提ドライバ
*/
typedef struct {
short ox,oy; //基準座標(前のスプライト)からのオフセット
unsigned short patnum; //パターン番号(パレット、反転アトリビュートを含む)
} SPLINK; //一枚あたりのスプライト情報
typedef struct {
unsigned short chips; //何枚のチップを使用するか?(大抵1枚)
SPLINK splink[0]; //スプライトリンク情報そのものの羅列
} SPINFO1; //スプライト情報
typedef struct {
int max_anim; //全アニメパターン数(コンパイラをだます関係上、必ずintを指定)
SPINFO1 *anim_info[0]; //アニメコマ情報アドレスの羅列
} SPINFO; //ゼロ配列はXCで使えないはず
/* ゼロ配列を持ちいた構造体の初期値付き宣言がどうも行かない様子。
よって、データはあらかじめべたメモリイメージで持たせておき、
あとで、構造体にばかしてやる(あまりスマートではないな)
E1RR: (=ID)一面で回転しながら飛んでくる赤い奴のばやい
6 アニメ数
E1RR00 0番目のSPINFO
E1RR01 1番目のSPINFO
:
E1RR05 5番目のSPINFO
な感じ
VH00 PPPP XXXX XXXX:
X:パターン番号
P:パレット番号
VH:反転フラグ
*/
//---------------------------------------------------------------------- DevMan()
typedef struct {
int kb[0x10];
int mbl,mbr,mx,my,mdx,mdy;
int stick,strigA,strigB;
} DEVICE;
//---------------------------------------------------------------------- TaskMan()
//タスクコマンド
#define TC_NON (0)
#define TC_HIT_ITEM (1) //正のコードは良いコード:アイテムのコード等
#define TC_HIT_ENEMY (-1) //敵にあたった:負のコードは悪いコード
#define TC_HIT_SHOT (-2) //弾に
#define TC_HIT_PLAYER (-3) //プレイヤーに
//タスクコマンドは-8~+7をリザーブにするか?
/*
汎用キャラクタータスク
*/
typedef struct {
//基本的にドライバしか値を操作出来ないもの
int *func_addr; //タスク実行アドレス
unsigned short delay_timer; //タスク本体が確保されてから最初に起動するまでの遅延時間(通常0):こいつがあるいちはlocal_counterはすすまない
char local_step; //自分の状態(利用方法は各タスク毎に違う:こいつは各自で管理)
char task_command; //外部からのコマンド(Hitchk等)
int local_counter; //これまでにTaskManから呼出された回数
int *hit_addr; //衝突した相手のタスクのアドレス:本当はTASK *hit_addr
//タスク情報↑+16()
SPINFO *disp0_addr; //キャラクタ情報アドレス
FIX32 disp0_x,disp0_y; //キャラクタ表示位置(小数点を持たせるべきか?)
unsigned short disp0_anim; //アニメ番号(数値を間違えるとすぐにバスる!)
unsigned char disp0_palet; //デフォルト外パレット
unsigned char disp0_pri; //プライオリティ(0~7):現在未使用
//表示情報↑+16
char hit_x0,hit_y0,hit_x1,hit_y1;//あたり判定オフセット
//あたり判定↑+4
short work[14]; //汎用ワーク
//汎用ワーク↑+28
} TASK;
/*現在:64byte/TASK
↑できるだけサイズを小さくすることが重要
汎用系の処理もタスクプログラム側にまかせるのを基本とする。
例:敵弾の移動ベクトルや当たりサイズの設定等
*/
/*
あたりサイズ1ドットの敵弾専用タスク
*/
typedef struct {
int *func_addr; //タスク実行アドレス(アニメ処理をやらす為)
unsigned short delay_timer; //タスク本体が確保されてから最初に起動するまでの遅延時間(通常0)
int local_counter; //これまでの呼出回数
//タスク情報↑+10
SPINFO *disp0_addr; //キャラクタ情報アドレス一応いるか?
FIX32 disp0_x,disp0_y; //キャラクタ表示位置
FIX32 disp0_vx,disp0_vy; //移動量
unsigned short disp0_anim; //アニメ番号(数値を間違えるとすぐにバスる!)
//表示情報↑+22
char local_step; //自分の状態(利用方法は各タスク毎に違う)
char task_command;
//+2
short work[7]; //半分アライメント用ワーク
//+14
} ESTASK; //total:48byte
/*
自機弾
*/
typedef struct {
int *func_addr; //タスク実行アドレス
SPINFO *disp0_addr; //キャラクタ情報アドレス
FIX32 disp0_x,disp0_y; //キャラクタ表示位置(小数点を持たせるべきか?)
FIX32 disp0_vx,disp0_vy; //移動量(基本的にまっすぐ飛ぶだけだからvxはいらない?)
unsigned short disp0_anim; //アニメ番号(数値を間違えるとすぐにバスる!)
char local_step; //自分の状態(利用方法は各タスク毎に違う)
char task_command;
short work[2]; //
} PSTASK; //total:32byte
#define MAX_ETASK (12) //登録可能な敵の数
#define MAX_MTASK (8) // 管理タスクの数
#define MAX_ITASK (32) // アイテムの数*2
#define MAX_ESTASK (48) // 敵弾の数
#define MAX_PSTASK (12) // 自機弾の数